"""
数据库服务模块

该模块提供数据库状态相关的业务逻辑处理，包括获取数据库列表。
通过调用CRUD层进行数据操作，并处理业务逻辑和异常情况。
"""

from typing import List, Dict, Any, Optional
from app.models.database import Database
from app.crud.database import get_databases, get_databases_by_status
from sqlalchemy.orm import Session
from fastapi import HTTPException, status
import logging

logger = logging.getLogger(__name__)

class DatabaseService:
    """数据库服务类"""
    
    def __init__(self, db: Session):
        self.db = db
    
    def get_all_databases(self, skip: int = 0, limit: int = 100, status: Optional[str] = None) -> List[Dict[str, Any]]:
        """获取所有数据库状态
        
        Args:
            skip (int): 跳过的记录数，默认为0
            limit (int): 返回的记录数限制，默认为100
            status (Optional[str]): 按状态过滤数据库
            
        Returns:
            List[Dict[str, Any]]: 包含数据库状态信息的字典列表
        """
        try:
            if status:
                databases = get_databases_by_status(self.db, status)
                # 手动应用分页
                databases = databases[skip:skip+limit]
            else:
                databases = get_databases(self.db, skip, limit)
            result = [database.to_dict() for database in databases]
            logger.info(f"成功获取 {len(result)} 个数据库状态 (skip={skip}, limit={limit}, status={status})")
            return result
        except Exception as e:
            logger.error(f"获取数据库状态列表时发生错误: {str(e)}")
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail="获取数据库状态失败，请稍后重试"
            )